scale: Rearrange child widgets
authorTimm Bäder <mail@baedert.org>
Fri, 26 Jun 2020 06:00:04 +0000 (08:00 +0200)
committerTimm Bäder <mail@baedert.org>
Sat, 27 Jun 2020 08:51:06 +0000 (10:51 +0200)
Always keep the order:

 - [value]
 - [marks.top]
 - [marks.bottom]
 - trough

Which makes sense given the rendering order. Slider should be drawn
after the marks.

Makes it possible to simply remove the custom snapshot implementations
in scale and range. And Adwaita does not depend on the node order
anyway.

gtk/gtkrange.c
gtk/gtkscale.c
testsuite/css/nodes/scale.nodes

index e90a48c68408aec6fd1e359286d9b38386653156..91f16b5133ec1eb4b90c2cafc35d2f01b5f0a485 100644 (file)
@@ -250,16 +250,6 @@ G_DEFINE_TYPE_WITH_CODE (GtkRange, gtk_range, GTK_TYPE_WIDGET,
 static guint signals[LAST_SIGNAL];
 static GParamSpec *properties[LAST_PROP];
 
-static void
-gtk_range_snapshot (GtkWidget   *widget,
-                    GtkSnapshot *snapshot)
-{
-  GtkRange *range = GTK_RANGE (widget);
-  GtkRangePrivate *priv = gtk_range_get_instance_private (range);
-
-  gtk_widget_snapshot_child (widget, priv->trough_widget, snapshot);
-}
-
 static void
 gtk_range_class_init (GtkRangeClass *class)
 {
@@ -275,7 +265,6 @@ gtk_range_class_init (GtkRangeClass *class)
   gobject_class->dispose = gtk_range_dispose;
 
   widget_class->measure = gtk_range_measure;
-  widget_class->snapshot = gtk_range_snapshot;
   widget_class->size_allocate = gtk_range_size_allocate;
   widget_class->unmap = gtk_range_unmap;
   widget_class->direction_changed = gtk_range_direction_changed;
index 455a004ac9053319da75ade0469477b41f1344cc..6e739f1b46149c69d1bdd453665909fd5c00f867 100644 (file)
  *
  * |[<!-- language="plain" -->
  * scale[.fine-tune][.marks-before][.marks-after]
+ * ├── [value][.top][.right][.bottom][.left]
  * ├── marks.top
  * │   ├── mark
  * │   ┊    ├── [label]
  * │   ┊    ╰── indicator
  * ┊   ┊
  * │   ╰── mark
- * ├── [value][.top][.right][.bottom][.left]
- * â\94\9câ\94\80â\94\80 trough
- * â\94\82   â\94\9câ\94\80â\94\80 [fill]
- * â\94\82   â\94\9câ\94\80â\94\80 [highlight]
- * â\94\82   â\95°â\94\80â\94\80 slider
- * â\95°â\94\80â\94\80 marks.bottom
- *     ├── mark
- *     â\94\8a    â\94\9câ\94\80â\94\80 indicator
- *     â\94\8a    â\95°â\94\80â\94\80 [label]
- *     ╰── mark
+ * ├── marks.bottom
+ * â\94\82   â\94\9câ\94\80â\94\80 mark
+ * â\94\82   â\94\8a    â\94\9câ\94\80â\94\80 indicator
+ * â\94\82   â\94\8a    â\95°â\94\80â\94\80 [label]
+ * â\94\8a   â\94\8a
+ * â\94\82   â\95°â\94\80â\94\80 mark
+ * ╰── trough
+ *     â\94\9câ\94\80â\94\80 [fill]
+ *     â\94\9câ\94\80â\94\80 [highlight]
+ *     ╰── slider
  * ]|
  *
  * GtkScale has a main CSS node with name scale and a subnode for its contents,
@@ -197,8 +198,6 @@ static void     gtk_scale_measure (GtkWidget      *widget,
 static void     gtk_scale_get_range_border        (GtkRange       *range,
                                                    GtkBorder      *border);
 static void     gtk_scale_finalize                (GObject        *object);
-static void     gtk_scale_snapshot                (GtkWidget      *widget,
-                                                   GtkSnapshot    *snapshot);
 static void     gtk_scale_real_get_layout_offsets (GtkScale       *scale,
                                                    gint           *x,
                                                    gint           *y);
@@ -661,7 +660,6 @@ gtk_scale_class_init (GtkScaleClass *class)
   gobject_class->notify = gtk_scale_notify;
   gobject_class->finalize = gtk_scale_finalize;
 
-  widget_class->snapshot = gtk_scale_snapshot;
   widget_class->size_allocate = gtk_scale_size_allocate;
   widget_class->measure = gtk_scale_measure;
   widget_class->grab_focus = gtk_widget_grab_focus_self;
@@ -1093,14 +1091,9 @@ gtk_scale_set_draw_value (GtkScale *scale,
                                              "css-name", "value",
                                              "label", txt,
                                              NULL);
-
           g_free (txt);
 
-          if (priv->value_pos == GTK_POS_TOP || priv->value_pos == GTK_POS_LEFT)
-            gtk_widget_insert_after (priv->value_widget, GTK_WIDGET (scale), NULL);
-          else
-            gtk_widget_insert_before (priv->value_widget, GTK_WIDGET (scale), NULL);
-
+          gtk_widget_insert_after (priv->value_widget, GTK_WIDGET (scale), NULL);
           gtk_range_set_round_digits (GTK_RANGE (scale), priv->digits);
           update_value_position (scale);
           update_label_request (scale);
@@ -1469,25 +1462,6 @@ gtk_scale_measure (GtkWidget      *widget,
     }
 }
 
-static void
-gtk_scale_snapshot (GtkWidget   *widget,
-                    GtkSnapshot *snapshot)
-{
-  GtkScale *scale = GTK_SCALE (widget);
-  GtkScalePrivate *priv = gtk_scale_get_instance_private (scale);
-
-  if (priv->top_marks_widget)
-    gtk_widget_snapshot_child (widget, priv->top_marks_widget, snapshot);
-
-  if (priv->bottom_marks_widget)
-    gtk_widget_snapshot_child (widget, priv->bottom_marks_widget, snapshot);
-
-  if (priv->value_widget)
-    gtk_widget_snapshot_child (widget, priv->value_widget, snapshot);
-
-  GTK_WIDGET_CLASS (gtk_scale_parent_class)->snapshot (widget, snapshot);
-}
-
 static void
 gtk_scale_real_get_layout_offsets (GtkScale *scale,
                                    gint     *x,
@@ -1722,9 +1696,7 @@ gtk_scale_add_mark (GtkScale        *scale,
 
           gtk_widget_insert_after (priv->top_marks_widget,
                                    GTK_WIDGET (scale),
-                                   (priv->value_widget &&
-                                    (priv->value_pos == GTK_POS_TOP || priv->value_pos == GTK_POS_LEFT)) ?
-                                     priv->value_widget : NULL);
+                                   priv->value_widget);
           gtk_widget_add_css_class (priv->top_marks_widget, GTK_STYLE_CLASS_TOP);
         }
       marks_widget = priv->top_marks_widget;
@@ -1742,9 +1714,7 @@ gtk_scale_add_mark (GtkScale        *scale,
 
           gtk_widget_insert_before (priv->bottom_marks_widget,
                                     GTK_WIDGET (scale),
-                                    (priv->value_widget &&
-                                     (priv->value_pos == GTK_POS_BOTTOM || priv->value_pos == GTK_POS_RIGHT)) ?
-                                      priv->value_widget: NULL);
+                                    gtk_range_get_trough_widget (GTK_RANGE (scale)));
           gtk_widget_add_css_class (priv->bottom_marks_widget, GTK_STYLE_CLASS_BOTTOM);
         }
       marks_widget = priv->bottom_marks_widget;
index 45c62bf355accfaf4b0453a7f2ac131956fb8b00..f059ba4b5a40a17d5cc81d3e1662d1bea382f392 100644 (file)
@@ -35,17 +35,14 @@ window.background:dir(ltr)
         mark:dir(ltr)
           label:dir(ltr)
           indicator:dir(ltr)
-      trough:dir(ltr)
-        highlight.top:dir(ltr)
-        slider:dir(ltr)
       marks.bottom:dir(ltr)
         mark:dir(ltr)
           indicator:dir(ltr)
           label:dir(ltr)
-    scale.horizontal.marks-after:dir(ltr)
       trough:dir(ltr)
         highlight.top:dir(ltr)
         slider:dir(ltr)
+    scale.horizontal.marks-after:dir(ltr)
       marks.bottom:dir(ltr)
         mark:dir(ltr)
           indicator:dir(ltr)
@@ -53,3 +50,6 @@ window.background:dir(ltr)
         mark:dir(ltr)
           indicator:dir(ltr)
           label:dir(ltr)
+      trough:dir(ltr)
+        highlight.top:dir(ltr)
+        slider:dir(ltr)